#!/usr/bin/env python3
"""
使用 melo 生成语音文件
"""

import argparse
import os
import sys

def main():
    # 解析命令行参数
    parser = argparse.ArgumentParser(description='使用 melo 生成语音文件')
    parser.add_argument('text', type=str, help='要转换为语音的文本')
    parser.add_argument('output_file', nargs='?', type=str, default='output.wav', 
                        help='输出的音频文件名 (默认: output.wav)')
    parser.add_argument('--language', '-l', type=str, default='ZH', 
                        help='语言 (默认: ZH)')
    
    args = parser.parse_args()
    
    # 尝试不同的导入方式
    try:
        # 方式 1: 尝试标准导入
        import melo
        
        print(f"找到 melo 版本: {melo.__version__ if hasattr(melo, '__version__') else '未知'}")
        print(f"melo 路径: {os.path.dirname(melo.__file__)}")
        
        # 检查 melo 模块中的内容
        print(f"melo 模块内容: {dir(melo)}")
        
        # 尝试创建 TTS 实例
        if hasattr(melo, 'TTS'):
            tts_class = melo.TTS
        elif hasattr(melo, 'api') and hasattr(melo.api, 'TTS'):
            tts_class = melo.api.TTS
        else:
            raise ImportError("找不到 TTS 类")
        
    except (ImportError, AttributeError) as e:
        print(f"导入 melo 时出错: {e}")
        print("正在尝试直接导入...")
        
        try:
            # 方式 2: 尝试直接导入
            from melo import TTS
            tts_class = TTS
        except ImportError:
            try:
                # 方式 3: 尝试从 api 子模块导入
                from melo.api import TTS
                tts_class = TTS
            except ImportError as e:
                print(f"无法导入 melo TTS: {e}")
                print("错误: 虽然 melo 已安装，但无法导入 TTS 类。")
                print("请检查 melo 的安装或使用 pip show melo 查看详细信息。")
                sys.exit(1)
    
    # 确保输出文件有 .wav 扩展名
    output_file = args.output_file
    if not output_file.lower().endswith('.wav'):
        output_file += '.wav'
    
    print(f"正在生成语音: '{args.text}'")
    
    try:
        # 初始化 TTS
        tts = tts_class(language=args.language)
        
        # 生成语音文件
        tts.tts_to_file(text=args.text, file_path=output_file)
        
        # 显示结果
        abs_path = os.path.abspath(output_file)
        print(f"语音文件已生成: {abs_path}")
        
    except Exception as e:
        print(f"生成语音时出错: {e}")
        sys.exit(1)

if __name__ == "__main__":
    main() 